package com.mingyuean.demo.simple;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author MingYueAn
 * <p> 作用：实现bean的注入
 * <p> 2023/3/10 17:14
 * @version: 1.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Component {
    /**
     * 为bean指定名称
     * @return 字符串
     */
    String value() default "";
}

/**
 * @Retention(RetentionPolicy.RUNTIME)
 * 表示注解的生命周期
 * 1、RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
 * 2、RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
 * 3、RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
 * 原文链接：https://blog.csdn.net/qq_18671415/article/details/111866546
 *
 * @Target(ElementType.TYPE)
 * 表示注解作用范围，超过这个作用范围，编译的时候就会报错
 * @Target(ElementType.TYPE)——接口、类、枚举、注解
 * @Target(ElementType.FIELD)——字段、枚举的常量
 * @Target(ElementType.METHOD)——方法
 * @Target(ElementType.PARAMETER)——方法参数
 * @Target(ElementType.CONSTRUCTOR) ——构造函数
 * @Target(ElementType.LOCAL_VARIABLE)——局部变量
 * @Target(ElementType.ANNOTATION_TYPE)——注解
 * @Target(ElementType.PACKAGE)——包，用于记录java文件的package信息
 * 原文链接：https://blog.csdn.net/dongzhanglong/article/details/120130237
 */
